package aeropuerto;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.Date;

import org.jgrapht.graph.DefaultWeightedEdge;

public class Tramo extends DefaultWeightedEdge{
	
	private static final long serialVersionUID = 1L;
	private int minutos;
	private Aeropuerto aer1;
	private Aeropuerto aer2;
	private ArrayList<Vuelito> vuelitos;
	
	public Tramo(Aeropuerto aer1, Aeropuerto aer2, int minutos){
		this.aer1=aer1;
		this.aer2=aer2;
		this.minutos=minutos;
		this.vuelitos=new ArrayList<Vuelito>();		
	}
	
	public int getMinutos() {
		return minutos;
	}
	public Aeropuerto getAer1() {
		return aer1;
	}
	public Aeropuerto getAer2() {
		return aer2;
	}
	public ArrayList<Vuelito> getVuelitos() {
		return vuelitos;
	}
	public void addVuelito(Vuelito v) {
		v.setTramo(this);
		this.vuelitos.add(v);
	}
	
	public ArrayList<Vuelito> filtrarVuelitosProximos(Aeropuerto orig, Aeropuerto dest, Date d, int maxEspera){
		ArrayList<Vuelito> lv=new ArrayList<Vuelito>();
		for(Vuelito v:vuelitos){
			if(v.getDestInicio().equals(orig) && v.getDestFinal().equals(dest)){
				Calendar c=Calendar.getInstance();
				c.setTime(d);
				c.add(Calendar.MINUTE, maxEspera);
				Date d2=c.getTime();
				if(v.getFechaPartidaReal().after(d) && v.getFechaPartidaReal().before(d2)){
					lv.add(v);
				}
			}
		}
		Collections.sort(lv,new VuelitoFechaComparador());
		return lv;
	}
	
	public boolean equals(Object x){
		boolean sonIguales;
		sonIguales= ((this.getAer1().equals(((Tramo) x).getAer1())) && (this.getAer2().equals(((Tramo) x).getAer2()))) 
						|| ((this.getAer1().equals(((Tramo) x).getAer2())) && (this.getAer2().equals(((Tramo) x).getAer1())));
		return sonIguales;
	}
	
	@Override
	public String toString() {
		return "[Tramo " + aer1 + "-" + aer2 + "; " + minutos + "m; " + vuelitos.size() + " vuelitos]";
	}
}
